home *** CD-ROM | disk | FTP | other *** search
- ; Dieses kleine resistente Programm hängt sich in den VDI-Vektor ein
- ; und verändert einige v_gtext()-Aufrufe derart, das die Fensterele-
- ; mente etwas ansehnlicher werden.
- ; Autor: Volker Hemsen
- ; System: ATARI GEM-TOS
- ; Sprache: Motorola 68k Assembler
- ; Compiler: GNU C 2.72, ASMTRANS
-
- XBRA EQU $58425241
- NWIN EQU $4e57696e
- VEC EQU $88
-
- TEXT
- res_start: bra.s main
-
- dc.l XBRA
- xbra: dc.l NWIN
- oldvec: dc.l 0
- newvec: lea regsave(pc),a0 ;Register sichern
- movem.l d0-d2/a1,(a0)
- cmp.w #115,d0 ;VDI-Trap?
- bne.s vec_end
- move.l d1,a1 ;Zeiger auf VDI-PB
- move.l (a1),a0 ;contrl-Zeiger holen
- cmp.w #8,(a0) ;v_gtext() ?
- bne.s vec_end
- cmp.w #1,6(a0) ;String mit einem Zeichen Länge?
- bne.s vec_end
- move.l 4(a1),a0 ;Zeichen prüfen
- move.w (a0),d2
- lea table(pc),a1
- table_loop: movem.w (a1)+,d0/d1
- tst.w d0
- beq.s vec_end
- cmp.w d2,d0
- bne.s table_loop
- move.w d1,(a0)
- vec_end: lea regsave(pc),a0 ; Register wieder herstellen
- movem.l (a0),d0-d2/a1
- move.l oldvec(pc),a0 ; und VDI-Trap anspringen
- jmp (a0)
- table: dc.w 5,45 ;Schließenfeld
- dc.w 6,241 ;Größenfeld
- dc.w 7,222 ;Vollfeld
- dc.w 0 ;Ende
- regsave: ds.l 3 ;Platz für Register
- res_end:
-
- ; NWIN-XBRA-Kennung suchen und aus Liste austragen
- instvec: lea (VEC).w,a2 ;Anfang der Liste
- move.l (a2),a0
- reinstloop: cmp.l #XBRA,-12(a0) ;XBRA-Kennung?
- bne vecerr
- cmp.l #NWIN,-8(a0)
- beq.s vecfound
- move.l a0,a2 ;alte Adresse merken
- move.l -4(a0),a0 ;neue Adresse lesen
- bra reinstloop
- vecfound: move.l -4(a0),(a2) ;und austragen
- ; eigene Routine in 'trap 2'-Vektor hängen
- vecerr: lea (VEC).w,a1
- lea oldvec(pc),a0
- move.l (a1),(a0)
- lea newvec(pc),a0
- move.l a0,(a1)
- rts
-
- ; Hauptroutine: alten Vektoreintrag entfernen, neuen eintragen
- ; und dann den oberen Programmcode resident machen
- main: pea instvec(pc)
- move.w #38,-(sp) ;Supexec()
- trap #14
- addq.l #6,sp
- lea res_end(pc),a0
- lea res_start(pc),a1
- sub.l a1,a0
- adda.l #$100,a0
- clr.w -(sp) ;Ptermres()
- move.l a0,-(sp)
- move.w #$31,-(sp)
- trap #1
- END
-
-